今天換來介紹在odoo中非常重要的一個功能,也就是inherit(繼承)。
Odoo原生的模組裡已經有非常多的功能了,但針對每個使用者的產業或是使用情境不同,可能會有原生的欄位或功能不能完全滿足的情況發生。這時候就會使用到繼承的功能了,下面來詳細的說明。
今天先來介紹繼承model的部分,在繼承任何一個model時,記得在__manifest__.py
的depands中加上要繼承的model所屬的模組,才能夠做後續的動作,下面以繼承銷售模組為例。
'depends': ['base', 'sale']
在一般新建model是使用_name
。
class IDXRepair(models.Model):
_name = 'idx.repair'
但在繼承時則要使用_inherit
,再填上需要繼承的model,就可以在原有的model下新增客製欄位或是客製function了。
class SaleOrderInherit(models.Model):
_inherit = 'sale.order'
新增客製欄位的方法跟一般新建model時建立欄位的做法相同,這邊就不再多說。
但關於原生的function在繼承時,有兩種用法:
1.修改原生的function,使用此種繼承方法,只要將原生的function全部複製下來,貼在客製模組的檔案下,就可以將整段function進行改寫。
2.以原生的function為基礎加上客製的邏輯來擴充需要的功能,不會更改到原生的function,在撰寫function使用super(),在程式執行到這行時會先做原生function的處理,再回到客製的程式做後續處理,下面以擴充原生的create為範例。
from odoo import api, fields, models, _
class SaleOrder(models.Model):
_inherit = 'sale.order'
@api.model
def create(self, vals):
# 可加入客製邏輯
super(SaleOrder, self).create(vals)
# 可加入客製邏輯
關於model的繼承就先講解到這邊,關於畫面的繼承讓我們等到明天再來仔細講解。